/*
 ============================================================================
 Page	     : 359
 Name        : sort_str.c
 Date	     : 20210406
 Author      : Hbue 18060333
 Copyright   : Your copyright notice
 Description : 读入字符串,并排序字符串
 ============================================================================
 */

#include <stdio.h>
#include <string.h>
#define SIZE 81								/* 限制字符串长度,包括\0 */
#define LIM  20								/* 可读入的最多行数 */
#define HALT ""								/* 空字符串停止输入 */
void stsrt(char *strings[], int num);		/* 字符串排序函数 */
char *s_gets(char * st, int n);

int main(void)
{
	int count = 0;				/* 输入计数 */
	char input[LIM][SIZE];		/* 存储输入的数组 */
	char *ptstr[LIM];			/* 内含指针变量的数组 */

	printf("Input up to %d lines, and I will sort them.\n", LIM);
	printf("To stop, press the Enter key at a line's start.\n");
	while(count < LIM && s_gets(input[count], SIZE) != NULL && input[count][0] != '\0')
	{
		ptstr[count] = input[count];	/* 设置指针指向字符串 */
		count++;
	}
	stsrt(ptstr, count);				/* 字符串排序函数 */
	puts("\nHere's the sorted list:\n");
	for(int k = 0; k < count; k++)
	{
		puts(ptstr[k]);					/* 排序后的指针 */
	}

	return 0;
}

/* 字符串-指针-排序函数 */
void stsrt(char *strings[], int num)
{
	char *temp = NULL;

	for(int top = 0; top < num - 1; top++)
	{
		for(int seek = top + 1; seek < num; seek++)
		{
			if(strcmp(strings[top], strings[seek]) > 0)
			{
				temp = strings[top];
				strings[top] = strings[seek];
				strings[seek] = temp;
			}
		}
	}
}

char *s_gets(char * st, int n)
{
	char *ret_val = NULL;

	ret_val = fgets(st, n, stdin);
	if(ret_val)
	{
		int i = 0;
		while(st[i] != '\n' && st[i] != '\0')
		{
			i++;
		}
		if(st[i] == '\n')
		{
			st[i] = '\0';
		}
		else
		{
			while(getchar() != '\n')
			{
				continue;
			}
		}
	}

	return ret_val;
}

